package com.zeyu.soc.log.tools;

import java.io.File;
import java.io.PrintStream;

/**
 * 转换日志的输出流.
 */
public class Trace {

	// ================================================================
	// Constants
	// ================================================================

	// 输出流定义为socket??
	public static PrintStream out = System.out;

	static {
		// 加上钩子，进行关闭
		Runtime.getRuntime().addShutdownHook(new Thread() {
			@Override
			public void run() {

				try {
					if (out != null) {
						out.close();
					}
				} catch (Exception e) {
				}
			}
		});
	}

	// ================================================================
	// Fields
	// ================================================================

	// ================================================================
	// Constructors
	// ================================================================

	// ================================================================
	// Methods from/for super Interfaces or SuperClass
	// ================================================================

	// ================================================================
	// Public or Protected Methods
	// ================================================================

	/**
	 * 初始化输出流,默认 pid.log
	 */
	public static void init(String logsFile) {
		try {
			File file = new File(logsFile);
			if (!file.exists()) {
				file.createNewFile();
			}
			out = new PrintStream(file);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 输出信息到指定的流.
	 */
	public static <T> void trace(T t) {
		out.println(t);
	}

	// ================================================================
	// Getter & Setter
	// ================================================================

	// ================================================================
	// Private Methods
	// ================================================================

	// ================================================================
	// Inner or Anonymous Class
	// ================================================================

	// ================================================================
	// Test Methods
	// ================================================================
}
